package com.mac.web;

import com.alibaba.fastjson.JSON;
import com.mac.pojo.EducationalResources;
import com.mac.service.EducationalResourcesService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 处理教育资源相关操作的Servlet。
 */
@WebServlet("/educationalresourceServlet/*")
public class EducationalResourceServlet extends BaseServlet {
    // 使用SLF4J记录日志
    private static final Logger LOGGER = LoggerFactory.getLogger("EducationalResourceServlet.Class");
    // 注入教育资源服务类，用于与教育资源数据交互
    EducationalResourcesService educationalResourcesService = new EducationalResourcesService();

    /**
     * 获取所有教育资源的方法。
     * @param req 请求对象，包含请求信息。
     * @param resp 响应对象，用于返回响应数据。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectAllEducationalresources(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 初始化教育资源列表，用于存储所有教育资源数据
        ArrayList<EducationalResources> educationalResources;

        try {
            // 调用教育资源服务方法，获取所有教育资源
            educationalResources = educationalResourcesService.selectAllEducationalresources();
            LOGGER.info("educationalResourcesService.selectAllEducationalresources()");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("educationalResourcesService.selectAllEducationalresources()-> failed", e);
            resp.getWriter().write("SAR_ERROR");
            return;
        }

        // 将教育资源列表转换为JSON格式
        String jsonString = JSON.toJSONString(educationalResources);

        // 设置响应内容类型并写入JSON字符串
        resp.setContentType("text/json;charset=utf-8");
        resp.getWriter().write(jsonString);
    }

    /**
     * 根据教育资源ID获取单个教育资源的方法。
     * @param req 请求对象，包含请求信息。
     * @param resp 响应对象，用于返回响应数据。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectOneByeducationalresourcesId(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从请求参数中获取教育资源ID
        String Resource_Id = req.getParameter("resource_Id");

        // 将教育资源ID转换为整数
        int resourceId = Integer.parseInt(Resource_Id);

        // 初始化教育资源对象，用于存储查询结果
        EducationalResources educationalResources;
        try {
            // 调用教育资源服务方法，根据ID查询单个教育资源
            educationalResources = educationalResourcesService.selectOneByeducationalresourcesId(resourceId);
            LOGGER.info("educationalResourcesService.selectOneByeducationalresourcesId(resourceId) -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("educationalResourcesService.selectOneByeducationalresourcesId(resourceId) -> failed", e);
            resp.getWriter().write("SAR_ERROR");
            return;
        }

        // 将教育资源转换为JSON格式
        String jsonString = JSON.toJSONString(educationalResources);

        // 设置响应内容类型并写入JSON字符串
        resp.setContentType("text/json;charset=utf-8");
        resp.getWriter().write(jsonString);
    }
}